home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
language
/
parallax
/
ibm_pc_d.exe
/
SAMPLES
/
FRACTAL.P
< prev
next >
Wrap
Text File
|
1992-11-06
|
2KB
|
79 lines
SYSTEM fractal;
CONST maxlevel = 7;
(* specification of binary tree-structure *)
CONFIGURATION tree [1..2**maxlevel -1];
CONNECTION son_l : tree[i] -> tree[2*i].father;
son_r : tree[i] -> tree[2*i+1].father;
father: tree[i] -> {EVEN(i)} tree[i DIV 2].son_l,
{ODD(i)} tree[i DIV 2].son_r;
SCALAR i,j : INTEGER;
delta : REAL;
field : ARRAY [1..2**maxlevel-1] OF REAL;
VECTOR x, low, high: REAL;
PROCEDURE Gauss(): VECTOR REAL;
(* random number with Gaussian distribution *)
CONST N = 4;
A = MAX(INTEGER);
GA= (3.0*FLOAT(N))**0.5;
GF= 2.0*GA / (FLOAT(N)*FLOAT(A));
SCALAR i : INTEGER;
VECTOR sum: REAL;
BEGIN
sum:=0.0;
FOR i:=1 TO N DO sum:= sum + FLOAT(VIRandom()) END;
RETURN (GF*sum - GA)
END Gauss;
PROCEDURE inorder(SCALAR node: INTEGER);
CONST maxnode = 2 ** maxlevel -1;
BEGIN
IF node <= maxnode THEN
inorder(2*node);
WriteFixPt(field[node], 10,3);
WriteLn;
inorder(2*node+1);
END
END inorder;
PROCEDURE MidPointRec(SCALAR delta: REAL; SCALAR level: INTEGER);
SCALAR min, max, max2 : INTEGER;
BEGIN
(* select tree-level: 2^(level-1) <= id_no <= 2^level - 1 *)
min := 2**(level-1);
max := 2 * min - 1;
max2:= 2 * max + 1;
PARALLEL
IF min <= id_no <= max THEN
x := 0.5 * (low + high) + delta*Gauss();
END;
(* select the current and the next tree-level for data propagation *)
IF min <= id_no <= max2 THEN
(* new values for low and high at right and left son, respectively *)
PROPAGATE.son_l(low);
PROPAGATE.son_r(high);
PROPAGATE.son_l(x);
PROPAGATE.son_r(x);
IF EVEN(id_no) THEN high:=x ELSE low:=x END;
END
ENDPARALLEL
END MidPointRec;
BEGIN (* main *)
PARALLEL (* [1] *) (* only the root is active *)
low := 0.0; (* starting value *)
high := 1.0;
x := 0.0;
ENDPARALLEL;
FOR i:=1 TO maxlevel DO
delta := 0.5 ** (FLOAT(i+1)/2.0);
MidPointRec(delta,i);
END; (* for *)
STORE(x,field);
inorder(1);
END fractal.